package version1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/** 版本1--封装【拓展】
 * Mysql工具类
 * 1.数据库：地址、用户名、密码  私有属性--静态化【本类可以直接调用】
 * Oracle与Mysql同时具备--地址、用户名、密码
 * 2.静态方法【本类直接调用】getParam(String 外置文件路径)
 *  目的：使用方法调用外部文件  db_mysql.properties
 *  db.mysql.properties 对应 JavaProperties类：读取键值对形式信息文件
 *  Properties类  提供方法： load() 真正读取配置文件信息【键值对--数据库基本信息】
 *
 * 3.通过封装概念--链接成功数据库【通过一个类链接Mysql和Oracle】
 *
 */
public class Mysql {
    //1.任何数据路具备：地址、用户名、密码--私有静态属性
    private static String url;
    private static String username;
    private static String password;
    //2.静态方法：getParam(String 路径)---链接数据库--读取信息
    //2.1配置文件：键值对出现，保存数据库对应的基本信息 xxx.properties
    public static void getParam(String fileName) throws IOException {
        //2.2properties类--读取xxx.properties配置文件信息
        Properties p=new Properties();
        //2.3 外置文件读取进来 --借助IO--搬运数据--InputStream
        //Mysql.class--当前Mysql类的对象  Mysql是当前类的名字
        //理解：图书馆--划区域--存Mysql相关书籍
        //getClassLoader()--获取当前类的加载器【加载器负责读取配置文件信息】
        //理解：图书馆--划区域--存Mysql相关书籍--图书管理员
        //getResourceAsStream(文件)--获取当前加载器中对应的键值对信息
        //理解：图书馆--划区域--存Mysql相关书籍--图书管理员--拿明确书籍
        InputStream fis=
                Mysql.class.getClassLoader().getResourceAsStream(fileName);
        p.load(fis);
        //2.4获取数据库基本信息【url、用户、密码】赋值给当前对象【url、用户、密码】
        //Properties类-提供方法 getproperty() 读取db_mysql.properties中键
        url=p.getProperty("url");
        username=p.getProperty("username");
        password=p.getProperty("password");
        System.out.println("测试链接成功:"+url+username+password);
    }

    public static void main(String[] args) throws IOException, SQLException {
        //3. 测试封装概念--链接成功数据库
        Mysql.getParam("db_mysql.properties");
        //参考mysql封装，写Oracle封装
        //练习：链接成功Mysql--增加操作

        //1.创建链接--Connection 代表Java链接成功数据库
        Connection con=DriverManager.getConnection(url,username,password);

        //2.执行sql--Statement 代表Java执行数据库 sql
        Statement st=con.createStatement();

        //3.【CRUD操作：增删改 executeUpdate() 查 executeQuery】
        //String sql="insert into book values(9,'余华','六',79,'2010年',80,'否')";
        //作业3：删和改【改sql】--查【参考：OracleJDBC的查】
        //删
        //String sql="delete from book where id in(6,7,8)";
        //改
        //String sql="update book set name='哈哈哈' where name ='三国演义'";
        //String sql="update book set name ='三国演义' where name='哈哈哈'";
        String sql="select * from book";

         //int rows=st.executeUpdate(sql); //执行增删改，返回值 int类型
        ResultSet rs=st.executeQuery(sql);
        while(rs.next()){
            int id=rs.getInt("id");
            String author=rs.getString("author");
            String name=rs.getString("name");
            int price=rs.getInt("price");
            String date=rs.getString("date");
            int number=rs.getInt("number");
            String discount=rs.getString("discount");
            System.out.println("序号:"+id+" 作者:"+author+" 书名:"+name+" 价格:"+price+" 日期:"+date+" 库存:"+number+" 打折情况:"+discount);
        }
       //System.out.println("成功"+rows+"条记录");

        //4.关闭链接--Statement--Connection
        st.close(); con.close();






    }
}
